package cases.chapter07.chapter0705;

import java.io.*;
import java.util.Scanner;

public class vote {
    private static String message = "";

    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        System.out.println("1:添加候选人 2:查看当前投票  3:投票  4:退出");
        while (true) {
            System.out.print("请输入操作指令：");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    System.out.println("请输入需要被投票的人：");
                    String name = sc.next();
                    System.out.println("请输入" + name + "的起始票数：");
                    int num = sc.nextInt();
                    addvote(name, num);// 1:添加投票人
                    break;
                case 2:
                    String me = readvote();// 2:查看投票
                    System.out.println(me);
                    break;
                case 3:
                    editvote();// 3:投票
                    break;
                case 4:
                    System.out.println("您已退出系统，谢谢使用！");
                    System.exit(0);
                    break;
                default:
                    System.out.println("您输入的指令错误！");
                    break;
            }
        }
    }

    /*
     * 查看投票
     */
    public static String readvote() throws Exception {
        FileInputStream in = new FileInputStream("D:\\count.txt");
        byte[] b = new byte[in.available()];
        in.read(b);
        message = new String(b);
        in.close();
        return message;
    }

    /*
     * 添加投票
     */
    public static void addvote(String name, int num) throws
            FileNotFoundException {
        String SEPARATE_FIELD = "\n";// 换行
        BufferedOutputStream out = null;
        StringBuffer sbf = new StringBuffer();// 拼接内容
        File file = new File("D:\\count.txt");   //判断文件是否存在
        try {
            // 当已存在count.txt文件，则在文件内容后追加
            if (file.canExecute()) {
                // 创建输出流，用于追加文件
                out = new BufferedOutputStream(new
                        FileOutputStream("D:\\count.txt", true));
            } else {// 不存在当天文件，则新建文件
                // 创建输出流，用于保存文件
                out = new BufferedOutputStream(new
                        FileOutputStream("D:\\count.txt"));
            }
            sbf.append(name).append(":");
            sbf.append(num).append("," + SEPARATE_FIELD);
            String str = sbf.toString();
            byte[] b = str.getBytes();
            for (int i = 0; i < b.length; i++) {
                out.write(b[i]);// 将内容写入本地文件
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (out != null)
                    out.close();// 关闭输出流
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
    }

    /*
     * 投票 将控制台输入的姓名的票数加一后保存
     */
    private static void editvote() throws Exception {
        FileWriter out = null;
        // 将count.txt文字根据“，”拆分成数组
        String[] editMessage = message.split(",");
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要投票人的姓名");
        String inputMessage = sc.next();
        //for循环拆分后的数组
        for (int i = 0; i < editMessage.length; i++) {
            //当数组中有有包含输入的名字时
            if (editMessage[i].contains(inputMessage)) {
                //取出输入名字现在的票数
                String a =
                        editMessage[i].substring(editMessage[i].indexOf(":") + 1,
                                editMessage[i].length());
                //将取出的票数强转为int类型
                int b = Integer.parseInt(a);
                //将票数+1
                b++;
                //new出一个StringBuffer用于后面的字符拼接
                StringBuffer sb = new StringBuffer();
                //取出原文件中的姓名和：
                String c = editMessage[i].substring(0, editMessage[i].indexOf(":") + 1);
                //使用StringBuffer拼接姓名和选票
                sb.append(c);
                sb.append(b);
                sb.append(",");
                //将拼接后的字符强转为String类型
                String s = sb.toString();
                //修改好的字符替换原有的字符
                System.out.println("投票后的票数：");
                System.out.println(s);
                editMessage[i] = s;
            }
        }
//editMessage是数组，我们需要将editMessage数组拼接为StringBuffer类型。
        StringBuffer sb1 = new StringBuffer();
        for (int i = 0; i < editMessage.length; i++) {
            sb1.append(editMessage[i]);
        }
        out = new FileWriter("D:\\count.txt");//覆盖原有文件
        //sb1是StringBuffer类型，需要使用toString（）方法
        out.write(sb1.toString());// 写入暂存的内容
        out.close();
    }
}